import { game, RenderRoot2D } from 'cc'
import Singleton from '../Base/Singleton'
import { createUINode } from '../Utils'

import { DrawManager,default_duration } from '../Scripts/UI/DrawManager'


// 实现单例
export default class FaderManager extends Singleton {
  private drawManager: DrawManager = null

  // 使用 getter 可以让调用代码更加简洁。你可以直接使用 DataManager.Instance 而不是 DataManager.getInstance()，使代码读起来更自然，就像访问一个属性一样。
  static get Instance() {
    return super.getInstance<FaderManager>()
  }

  init() {
    // RenderRoot2D 组件是 Canvas 的基类，任何需要显示的 2D/UI 节点都 必须要挂载在 RenderRoot2D 下才 可以正确的显示。
     const root = createUINode()
     root.addComponent(RenderRoot2D)

     // 创建一个节点，并设置为常驻节点
     const node = createUINode()
     node.setParent(root)
     const drawManager = node.addComponent(DrawManager)
     this.drawManager = drawManager
     this.drawManager.init()

    //  通过常驻节点进行场景资源管理和参数传递
    game.addPersistRootNode(root)
  }

  get fader() {
    if(this.drawManager === null) {
      this.init()
    }
    return this.drawManager
  }

  async fadeIn(duration: number = default_duration) {
    await this.fader.fadeIn(duration)
  }

  async fadeOut(duration: number = default_duration) {
    await this.fader.fadeOut(duration)
  }

  async mask(duration: number = default_duration) {
    await this.fader.mask(duration)
  }
}
